home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / gemxx19.zoo / gem++19 / include / img.h < prev    next >
C/C++ Source or Header  |  1993-04-28  |  2KB  |  88 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  IMG - Standard GEM image format
  4. //
  5. //  An IMG is a bitmap.
  6. //
  7. //  This file is Copyright 1992,1993 by Warwick W. Allison.
  8. //  This file is part of the gem++ library.
  9. //  You are free to copy and modify these sources, provided you acknowledge
  10. //  the origin by retaining this notice, and adhere to the conditions
  11. //  described in the file COPYING.LIB.
  12. //
  13. /////////////////////////////////////////////////////////////////////////////
  14.  
  15. #ifndef IMG_h
  16. #define IMG_h
  17.  
  18. #include <bool.h>
  19.  
  20.  
  21. class IMG
  22. {
  23. public:
  24.     // Contents undefined, but writable.
  25.     IMG(int width,int height,int depth=1);    
  26.  
  27.     // Contents defined as bitmap At given location, with given dimensions.
  28.     IMG(unsigned char* At, int width, int height, int depth=1);
  29.  
  30.     // Read from IMG file.
  31.     IMG(const char *);
  32.  
  33.     virtual ~IMG();
  34.  
  35.     int operator!() const; // creation failure (memory or file) test
  36.  
  37.     int Save(const char *,int PatLen=2);
  38.  
  39.     int operator() (int,int);
  40.     void Left();
  41.     void Right();
  42.     void Up();
  43.     void Down();
  44.     void Put(short);
  45.     short Get() const;
  46.  
  47.     int Width() const;
  48.     int Height() const;
  49.     int Depth() const;
  50.  
  51.     long Pos() const;
  52.     void Repos(long);
  53.  
  54.     void Clear(int colour=0);
  55.     void operator|= (const IMG&);
  56.     //void Copy(const IMG& from);
  57.     //void Copy(const IMG& from, int to_x, int to_y, const GRect& fromarea);
  58.  
  59.     unsigned char* Location() const;
  60.  
  61. private:
  62.     int W,H,D;
  63.     int bW,uW,uH;
  64.     unsigned char *data;
  65.     long Cursor;
  66.     unsigned char bit;
  67.     bool External;
  68. };
  69.  
  70. const unsigned char TOPBIT=(1<<7);
  71.  
  72. inline int IMG::operator() (int X,int Y) { Cursor=bW*Y+(X>>3); bit=TOPBIT>>(X&7); return Get(); }
  73. inline void IMG::Left() { if (bit==TOPBIT) { bit=1; Cursor--; } else bit<<=1; }
  74. inline void IMG::Right() { if (bit==1) { bit=TOPBIT; Cursor++; } else bit>>=1; }
  75. inline void IMG::Up() { Cursor-=bW; }
  76. inline void IMG::Down() { Cursor+=bW; }
  77. inline void IMG::Put(short b) { if (b) data[Cursor]|=bit; else data[Cursor]&=~bit; }
  78. inline short IMG::Get() const { if (data[Cursor]&bit) return 1; else return 0; }
  79. inline long IMG::Pos() const { return (Cursor<<8)|bit; }
  80. inline void IMG::Repos(long p) { Cursor=p>>8; bit=p&0xff; }
  81. inline int IMG::Width() const { return bW<<3; }
  82. inline int IMG::Height() const { return H; }
  83. inline int IMG::Depth() const { return D; }
  84. inline int IMG::operator!() const { return !data; }
  85. inline unsigned char* IMG::Location() const { return data; }
  86.  
  87. #endif
  88.